package com.myway.core.base.db;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.persistence.LockModeType;

import com.myway.dto.utils.DTOPagedList;

public interface BaseDao<B extends Serializable> {

	public B find(Object id);
	
	public List<B> findByNamedQuery(String queryName, Object... objects);
	
	public List<B> findByNamedQueryAndNamedParams(String queryName, Map<String, Object> paramMap);
	
	public B getReference(Object id);

	public void persist(B obj);

	public void merge(B obj);
	
	public void refresh(B obj);

	public void remove(B obj);
	
	public void lock(final B obj, final LockModeType type);
	
	
	/***
	 * HQL条件查询
	 * @param hql hql查询语句
	 * @param values 参数
	 * @return
	 */
	public List<B> super_hql_listQuery(final String hql, final Object... params);
	
	/***
	 * HQL分页查询
	 * @param hql hql语句
	 * @param currentPageNum 当前页数
	 * @param pageSize	显示行数
	 * @param values 查询列表
	 * @return
	 */
	public DTOPagedList<B> super_hql_pagedQuery(String hql, Integer currentPageNum, Integer pageSize, Object... params);
	
	/***
	 * 通过SQL执行update
	 * @param sql sql查询语句
	 * @param params 参数
	 * @return
	 */
	public int super_sql_update(String sql, Object... params);
	
	
	/***
	 * 通过SQL查询Count
	 * @param sql sql查询语句
	 * @param params 参数
	 * @return
	 */
	public int super_sql_count(String sql, Object... params);
	
	/***
	 * SQL查询
	 * @param sql 查询sql语句
	 * @param params sql语句中的查询列条件
	 * @return
	 */
	public List<Map<String, Object>> super_sql_listQuery(String sql, Object... params);
	
	/***
	 * SQL查询
	 * @param cb 结果返回值封装类
	 * @param sql 查询sql语句
	 * @param params sql语句中的查询列条件
	 * @return
	 */
	public List<B> superSqlListQuery(String sql, Object... params);
	
	/***
	 * SQL查询
	 * @param cb 结果返回值封装类
	 * @param sql 查询sql语句
	 * @param params sql语句中的查询列条件
	 * @return
	 */
	public List<B> super_sql_listQuery(Class<B> cb, String sql, Object... params);
	
	/***
	 * sql分页查询
	 * @param sql 查询sql语句
	 * @param currentPageNum 当前页数
	 * @param pageSize	显示行数
	 * @param params sql语句中的查询列条件
	 * @return
	 */
	public DTOPagedList<B> super_sql_listQuery(String sql, Integer currentPageNum, Integer pageSize, Object... params);
	
	/***
	 * sql分页查询
	 * @param cb 结果返回值封装类
	 * @param sql 查询sql语句
	 * @param currentPageNum 当前页数
	 * @param pageSize	显示行数
	 * @param params sql语句中的查询列条件
	 * @return
	 */
	public DTOPagedList<B> super_sql_listQuery(Class<B> cb, String sql, Integer currentPageNum, Integer pageSize, Object... params);
}